package com.colin.app.activity.splash;

import android.Manifest;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.AnimationSet;
import android.view.animation.DecelerateInterpolator;
import android.view.animation.RotateAnimation;
import android.view.animation.ScaleAnimation;
import android.view.animation.TranslateAnimation;

import com.colin.app.app.BaseModelImpl;
import com.colin.library.other.Constants;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by Colin on 2017/1/15.
 */

public class SplashModelImpl extends BaseModelImpl implements SplashContract.SplashModel {


    @Override
    public List<String> getPermissionList() {
        List<String> permissionList = new ArrayList<>();
        permissionList.add(Manifest.permission.CAMERA);
        permissionList.add(Manifest.permission.READ_CONTACTS);
        permissionList.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
        return permissionList;
    }

    @Override
    public Animation getAnimation() {
        //AnimationSet类是一个Animation集合，里面可以许多Animation，
        //且在AnimationSet中设置的属性适用于里面的所有Animation。
        //参数true 则共享@Interpolator
        AnimationSet animationSet = new AnimationSet(true);
        //透明
        Animation alphaAnim = getAlphaAnimation();
        animationSet.addAnimation(alphaAnim);
        //缩放
        Animation scaleAnimation = getScaleAnimation();
        animationSet.addAnimation(scaleAnimation);
        //旋转
//        Animation rotateAnim = getRotateAnimation();
//        animationSet.addAnimation(rotateAnim);
        //移动 上面三个动画是同时进行的，我现在需要让移动这个动画在上面的动画之后执行
        //需要使用setStartOffset 设置动画开始的时间
//        Animation translateAnim = getTranslateAnimation();
//        translateAnim.setStartOffset(500);
//        animationSet.addAnimation(translateAnim);
        return animationSet;
    }

    /**
     * 透明效果
     *
     * @return
     */
    public Animation getAlphaAnimation() {
        //实例化 AlphaAnimation 主要是改变透明度
        //透明度 从 1-不透明 0-完全透明
        Animation animation = new AlphaAnimation(0.2f, 1.0f);
        //设置动画插值器 被用来修饰动画效果,定义动画的变化率
        animation.setInterpolator(new DecelerateInterpolator());
        //设置动画执行时间
        animation.setDuration(Constants.ANIMATION_DURATION_TIME);
        return animation;
    }

    /**
     * 缩放动画
     *
     * @return
     */
    public Animation getScaleAnimation() {
        //实例化 ScaleAnimation 主要是缩放效果
        //参数：fromX-动画开始前，x坐标   toX-动画结束后x坐标
        //fromY-动画开始前，Y坐标  toY-动画结束后Y坐标
        //pivotXType - 为动画相对于物件的X坐标的参照物   pivotXValue - 值
        //pivotYType - 为动画相对于物件的Y坐标的参照物   pivotYValue - 值
//        ScaleAnimation(float fromX, float toX, float fromY, float toY, int pivotXType, float pivotXValue, int pivotYType, float pivotYValue)
        Animation animation = new ScaleAnimation(0.0f, 1.0f, 0.0f, 1.0f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
        //设置动画插值器 被用来修饰动画效果,定义动画的变化率
        animation.setInterpolator(new DecelerateInterpolator());
        //设置动画执行时间
        animation.setDuration(Constants.ANIMATION_DURATION_TIME);
        return animation;
    }

    /**
     * 旋转
     *
     * @return
     */
    public Animation getRotateAnimation() {
        //实例化RotateAnimation
        //以自身中心为圆心，旋转360度  正值为顺时针旋转，负值为逆时针旋转
        RotateAnimation animation = new RotateAnimation(0, 360, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
        //设置动画插值器 被用来修饰动画效果,定义动画的变化率
        animation.setInterpolator(new DecelerateInterpolator());
        //设置动画执行时间
        animation.setDuration(Constants.ANIMATION_DURATION_TIME);
        return animation;
    }

    /**
     * 移动
     *
     * @return
     */
    public Animation getTranslateAnimation() {
        //实例化TranslateAnimation
        //以自身为坐标系和长度单位，从(0,0)移动到(1,1)
        TranslateAnimation animation = new TranslateAnimation(
                Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF,
                1.0f, Animation.RELATIVE_TO_SELF, 0.0f,
                Animation.RELATIVE_TO_SELF, 1.0f);
        //设置动画插值器 被用来修饰动画效果,定义动画的变化率
        animation.setInterpolator(new DecelerateInterpolator());
        //设置动画执行时间
        animation.setDuration(Constants.ANIMATION_DURATION_TIME);
        return animation;
    }
}
